#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N],f[N];
int main()
{
	int n = 0;
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	int ret = 0;
	for (int i = 1;i <= n;i++)
	{
		//每个字母自己就是一个串所以初始化f数组为1
		f[i] = 1;
		for (int j = 1;j < i;j++)
		{
			if (a[j] < a[i])
			{
				//此时说明i为结尾的字符串可以新增一个字母
				//让他等于所有满足这个条件的字母的f的最大值，因为我们想让最多的字母接进来
				f[i] = max(f[i], f[j] + 1);
			}
			//此时i位置的最长串已经更新完了可以更新最后结果了
			ret = max(ret, f[i]);
		}
	}
	cout << ret << endl;
	return 0;
}